/**
 * 模拟数据服务，用于前端开发和测试
 * 在后端API准备好之前，可以使用这些模拟数据
 */

/**
 * 生成模拟的股票预测数据
 * @param {string} symbol 股票代码
 * @param {string} timeframe 时间框架
 * @returns {Object} 模拟的预测数据
 */
export const generateMockPrediction = (symbol, timeframe) => {
  const today = new Date()
  const dates = []
  const actual = []
  const predicted = []
  const upper_bound = []
  const lower_bound = []
  
  // 生成过去30天的历史数据
  for (let i = 30; i >= 0; i--) {
    const date = new Date(today)
    date.setDate(date.getDate() - i)
    dates.push(date.toISOString().split('T')[0])
    
    // 生成基于正弦波的价格模式，添加一些随机性
    const basePrice = 100 + Math.sin(i / 5) * 10
    const actualPrice = basePrice + (Math.random() - 0.5) * 5
    actual.push(actualPrice.toFixed(2))
    
    // 对于过去的数据，预测值就是实际值
    if (i > 0) {
      predicted.push(actualPrice.toFixed(2))
      upper_bound.push((actualPrice + 2).toFixed(2))
      lower_bound.push((actualPrice - 2).toFixed(2))
    }
  }
  
  // 生成未来7天的预测数据
  for (let i = 1; i <= 7; i++) {
    const date = new Date(today)
    date.setDate(date.getDate() + i)
    dates.push(date.toISOString().split('T')[0])
    
    const lastActual = parseFloat(actual[actual.length - 1])
    const trend = Math.random() > 0.5 ? 1 : -1
    const predictedPrice = lastActual + trend * (Math.random() * 3)
    
    actual.push(null) // 未来没有实际值
    predicted.push(predictedPrice.toFixed(2))
    upper_bound.push((predictedPrice + 4).toFixed(2))
    lower_bound.push((predictedPrice - 4).toFixed(2))
  }
  
  return {
    symbol,
    timeframe,
    dates,
    actual,
    predicted,
    upper_bound,
    lower_bound
  }
}

/**
 * 生成模拟的预测指标数据
 * @param {string} symbol 股票代码
 * @returns {Object} 模拟的预测指标
 */
export const generateMockPredictionMetrics = (symbol) => {
  return {
    symbol,
    accuracy: (70 + Math.random() * 20).toFixed(2),
    mape: (5 + Math.random() * 5).toFixed(2),
    rmse: (2 + Math.random() * 3).toFixed(2),
    confidence_score: (60 + Math.random() * 30).toFixed(2)
  }
}

/**
 * 生成模拟的市场情绪数据
 * @returns {Object} 模拟的市场情绪数据
 */
export const generateMockMarketSentiment = () => {
  return {
    overall: 0.6 + Math.random() * 0.3,
    sectors: {
      technology: 0.7 + Math.random() * 0.2,
      finance: 0.5 + Math.random() * 0.3,
      consumer: 0.6 + Math.random() * 0.2,
      healthcare: 0.65 + Math.random() * 0.25,
      energy: 0.4 + Math.random() * 0.3
    },
    trending_topics: [
      '央行降息对市场的影响',
      '科技股估值调整',
      '新能源汽车产业链',
      '人工智能应用前景',
      '医药板块投资机会'
    ]
  }
}

/**
 * 生成模拟的市场指数数据
 * @returns {Array} 模拟的市场指数数据
 */
export const generateMockMarketIndices = () => {
  return [
    {
      name: '上证指数',
      code: '000001.SH',
      current: (3000 + Math.random() * 500).toFixed(2),
      change: ((Math.random() - 0.3) * 50).toFixed(2),
      changePercent: ((Math.random() - 0.3) * 3).toFixed(2)
    },
    {
      name: '深证成指',
      code: '399001.SZ',
      current: (10000 + Math.random() * 2000).toFixed(2),
      change: ((Math.random() - 0.3) * 100).toFixed(2),
      changePercent: ((Math.random() - 0.3) * 3).toFixed(2)
    },
    {
      name: '创业板指',
      code: '399006.SZ',
      current: (2000 + Math.random() * 500).toFixed(2),
      change: ((Math.random() - 0.3) * 40).toFixed(2),
      changePercent: ((Math.random() - 0.3) * 4).toFixed(2)
    }
  ]
}

/**
 * 生成模拟的市场新闻数据
 * @returns {Array} 模拟的市场新闻数据
 */
export const generateMockMarketNews = () => {
  return [
    {
      title: '央行宣布降息25个基点，市场反应积极',
      source: '经济日报',
      time: '2小时前',
      url: '#',
      sentiment: 0.8
    },
    {
      title: '科技龙头企业发布季度财报，业绩超预期',
      source: '证券时报',
      time: '4小时前',
      url: '#',
      sentiment: 0.75
    },
    {
      title: '新能源汽车销量创新高，相关概念股受关注',
      source: '上海证券报',
      time: '6小时前',
      url: '#',
      sentiment: 0.65
    },
    {
      title: '监管部门发布新政策，加强金融风险防控',
      source: '金融时报',
      time: '昨天',
      url: '#',
      sentiment: 0.4
    },
    {
      title: '国际贸易摩擦加剧，出口相关板块承压',
      source: '国际商报',
      time: '昨天',
      url: '#',
      sentiment: 0.3
    }
  ]
}

export default {
  generateMockPrediction,
  generateMockPredictionMetrics,
  generateMockMarketSentiment,
  generateMockMarketIndices,
  generateMockMarketNews
}